const puppeteer=require('puppeteer');
let request=require('request-promise-native');
const fs = require('fs');
const axios=require('axios');
const moment = require('moment');
const now = moment().format('YYYYMMDD');


// 使用puppeteer.launch启动Chrome
async function main(){
  const bro=await puppeteer.launch({//代表浏览器
    headless:false,    // 有浏览器界面启动
    slowMo:150,      // 放慢浏览器执行速度，方便测试观察
    args:[
      '-no-sandbox',
      '--window-size=1366,768'
    ],
  });
  const page=await bro.newPage();//创建新窗口 新页面
  page.setViewport({width: 1366, height: 768})
  //跳转页面
  await page.goto('https://list.iqiyi.com/www/4/-------------4-1-1-iqiyi--.html?s_source=PCW_LC');
var min = 0,max =15
 let total = 850//815条 爱奇艺 没有显示确切总数量 所以 这里自己写个数 可以通过日志中的空数组来猜测大概数目

	   return new Promise((resolve, reject)=>{
		   
		   async function forFunction(){
		   		 
		   		extractData(page,min,max,total)  //抓取数据
		   		console.log(`调用extractData:min是：${min},max是：${max}`)
		   		// var nextPage = await page.$('.next-page')//获取下一页按钮
		   		if(max<total){//
		   			min +=15
		   			max +=15
		   			// await nextPage.click()
		   			await page.keyboard.down('PageDown');
		   			await page.keyboard.down('PageDown');
		   			await page.keyboard.down('PageDown');
		   			setTimeout(function(){
		   				forFunction()
		   			},500)//慢一点 免得被限制访问
		   			
		   		}else{
		   			console.log('任务完成 2秒后关闭')
					resolve({status:200,msg:'抓取完成'})
		   			setTimeout(function(){
		   				close()
		   			},2000)
		   			//没有下一页时关闭页面 关闭浏览器
		   			
		   		}
		    }
		    
		    // 执行任务
		    forFunction()
		    
		   async function close(){
		    		await page.close();
		    		await bro.close();	  
		    }
	   })
	
	  
	   // extractData(page,1,10) //测试时可以直接使用这里 注释掉 上面部分 

};	


async function extractData(page,_min,_max,_total){
	console.log(`开始提取数据...`)
	
var data = await page.evaluate((min,max,total) => {
			let result =[] //结果集
			if(max>total){
				max = total
			}
			for(let i = min;i<max;i++){
				let $el = document.querySelector('.qy-mod-ul').childNodes[i]// 找到的目标元素
				if(!$el){continue}
				    // 需要保存的数据
				let episode = $el.querySelector('.qy-mod-label').innerHTML
				let imgUrl = $el.querySelector('.qy-mod-cover').style.backgroundImage.replace("url(","").replace(")","")
				imgUrl = imgUrl.replace('?caplist=jpg,webp\"','').replace('\"','')
				// let exclusive = $el.querySelector('div.icon-tr>img')
				// if(exclusive){exclusive ='https:'+exclusive.getAttribute('src')}else{exclusive = ''}
				
				result.push({
					title: $el.querySelector('.link-txt span').innerHTML,//标题
					titleLink: 'https:' + $el.querySelector('.link-txt').getAttribute('href'),//链接
					imgUrl: 'https:'+imgUrl,//图片地址
					exclusive: '',//exclusive,//,会员或者独家
					episode:episode.replace(/[\r\n]\s+/g,""),//更新到多少话了
					synopsis:$el.querySelector('.sub').innerText//简介
				});
			}
			  // 返回数据
			  return result
			  // return _a
			  
	   },_min,_max,_total)
	  // console.log(data)
	  //写数据 与 上传
	 writeFile(data)
}

//写入文件
async function writeFile(data){
	console.log('开始保存提交数据...')
	
	let upData = {
		action:'aiqiyi',
		data:data
	}
	axios.post('https://ff5f406c-368c-4527-9a5a-3e83eab9e589.bspapp.com/http/collector', upData).then(res => {
		  console.log(res.data)
	}).catch(error => {
		console.log(error)
	})   //查询失败返回的值
	
	let formatData = JSON.stringify(data,null, 4);//格式化数据
	fs.writeFile(`./log/aiqiyi${now}.json`, formatData, {'encoding':'utf8','flag':'a'}, (err) => {//flag:a 累加写入 w 清空写入
	    if (err){
			console.log(err)  
		  } 
	    console.log('已写入json');
	});
	
	
}
// main()
module.exports =  {main}